package Cinema.CinemaEntities;

import java.util.Date;
import Exceptions.IllegalSeatsFormat;
import Exceptions.SeatAlreadyFree;


/**
 * Interface for show of the Cinema system.
 * @author The Fuchtzeinsoft Team.
 *
 */
public interface IShow {

	/**
	 * Sets the movie of the show.
	 * @param movie - The new movie of the show.
	 */
	public abstract void saveMovie(Movie movie);

	/**
	 * Getter of the movie of the show
	 * @return The movie of the show.
	 */
	public abstract Movie getMovie();

	/**
	 * Getter of the theater of the show.
	 * @return The theater of the show.
	 */
	public abstract Theater getTheater();

	/**
	 * Getter of the movie name
	 * @return The movie name.
	 */
	public abstract String getMovieName();
	
	/**
	 * Getter of movie genre
	 * @return the movie genre string
	 */
	public abstract String getMovieGenre();

	/**
	 * Getter of the date and time of the movie
	 * @return The date and time of the movie.
	 */
	public abstract Date getShowDate();

	/**
	 * Requests to free seats that has been ordered for the show.
	 * @param seats - The sites that need to be freed. The first element is the column number, and the
	 * 				  other cells contains the seats number.
	 * @throws IllegalSeatsFormat - If the seats order is illegal.
	 * @throws SeatAlreadyFree - If one or more of the seats is already free.
	 */
	public abstract void freeSeats(Integer[] seats) throws SeatAlreadyFree,
			IllegalSeatsFormat;

	/**
	 * Requests to order seats in the show.
	 * @param numberOfSeats - The number of seats that need be saved for the show.
	 * @return Array of integers representing the seats saved for the show. The first cell contain the row number
	 * 		   and the other cells contain the seats number
	 */
	public abstract Integer[] OrderPlaces(int numberOfSeats);

	/**
	 * Checking if there is enough seats next to each other.
	 * @param numberOfSeats - The number of seats that need be checked for.
	 * @return 'True' if there is numberOfSeats free seats next to each other. Otherwise, 'False'.
	 */
	public abstract Boolean checkOrderPossibility(int numberOfSeats);
	
	/**
	 * Getter for the show id.
	 * @return The show id.
	 */
	public long getId();

	public abstract int getAdultTicketPrice();

	public abstract int getChildTicketPrice();

}